package com.dy.其他.中级.两整数之和;
/*
不使用运算符 + 和 -，计算两整数  a 、b之和。

示例 1:

输入: a = 1, b = 2
输出: 3
示例 2:

输入: a = -2, b = 3
输出: 1
 */

/**
 * 这道题实际上就是在考 计算机底层是如何实现加减法的。
 *
 * 很明显计算机本身是不动+ - 的，它的底层是通过 异或 和 与 两个位运算来实现的，异或 是不带进位的结果， 与 是进位。
 */
public class Solution {
    public int getSum(int a, int b) {
        int res = 0;
        //不进位的加和
        int xor = a^b;

        int forward = (a&b)<<1;

        if(forward != 0){
            res = getSum(xor,forward);//循环处理 进位和+不进位加和
        }else {//不需要进位
            res = xor;
        }
        return res;

    }
}
